﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using System.Xml.Schema;
using System.IO;

namespace GenIX
{
    public partial class MainForm : Form
    {
        // <ElementsMenu>
        // ======================= Элементы меню ===================================
        // </ElementsMenu>


        // <OpenMenu>
        // При клике по пункту меню Открыть
        // </OpenMenu>
        private void openToolStripMenuItem_Click(object sender, EventArgs e)
        {
            openFileDialog1.Filter = "XML Files (*.xml)|*.xml|All Files (*.*)|*.*";
            openFileDialog1.Title = "Открытие Xml-файла";
            openFileDialog1.FileName = "";

            if (openFileDialog1.ShowDialog() == System.Windows.Forms.DialogResult.OK)
            {
                filename = openFileDialog1.FileName;

                // <ifParse> Успешный анализ </ifParse>
                if (Parsing(filename, false, 0))
                {
                    openedFilesListBox.Items.Add(filename);
                    openedFilesListBox.SelectedItem = filename;
                    editToolStripMenuItem.Enabled = true;
                    closeToolStripMenuItem.Enabled = true;
                    close_allToolStripMenuItem.Enabled = true;
                    buildTree(filename);
                }
                else
                {
                    // <ifNotParse> Неудачный анализ </ifNotParse> 
                    if (openedFilesListBox.SelectedIndex >= 0)
                    {
                        if (openedFilesListBox.SelectedIndex > 0)
                            openedFilesListBox.SelectedIndex -= 1;
                        if (openedFilesListBox.SelectedIndex < openedFilesListBox.Items.Count - 1)
                            openedFilesListBox.SelectedIndex += 1;
                        filename = openedFilesListBox.SelectedItem.ToString();
                        Parsing(filename, false, 0);
                        buildTree(filename);
                        saveToolStripMenuItem.Enabled = false;
                    }
                }
            }
        }
        
        // <CloseMenu>
        // При клике по пункту меню Закрыть
        // </CloseMenu>
        private void closeToolStripMenuItem_Click(object sender, EventArgs e)
        {
            interfacePanel.Controls.Clear();
            hierarchyTreeView.Nodes.Clear();
           
            if (openedFilesListBox.SelectedIndex >= 0)
            {
                // <DeleteTemp> Удаление одного временного файла </DeleteTemp>
                for (int i = 0; i <= lenghtWrite; i++)
                {
                    if (Path.GetDirectoryName(openedFilesListBox.SelectedItem.ToString()) + "\\ROWS.dtd" == CheckWrite[i])
                    {
                        FileInfo FI = new FileInfo(CheckWrite[i]);
                        FI.Delete();
                    }
                }

                // <CheckBorder> Проверка границ (верхняя, нижняя или последняя) и выделение нужных пунктов </CheckBorder>
                openedFilesListBox.Items.RemoveAt(openedFilesListBox.SelectedIndex);
                
                if (openedFilesListBox.SelectedIndex > 0)
                    openedFilesListBox.SelectedIndex -= 1;
                if (openedFilesListBox.SelectedIndex < openedFilesListBox.Items.Count - 1)
                    openedFilesListBox.SelectedIndex += 1;
                if (openedFilesListBox.Items.Count == 0)
                {
                    editToolStripMenuItem.Enabled = false;
                    closeToolStripMenuItem.Enabled = false;
                    close_allToolStripMenuItem.Enabled = false;
                    saveToolStripMenuItem.Enabled = false;
                }
            }
        }


        // <ExitMenu>
        // При клике по пункту меню Выход
        // </ExitMenu>
        private void exitToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // <DeleteAllTemp> Удаление всех временных файлов </DeleteAllTemp>
            for (int j = 0; j <= openedFilesListBox.Items.Count - 1; j++)
            {
                for (int i = 0; i <= lenghtWrite; i++)
                {
                    if (Path.GetDirectoryName(openedFilesListBox.Items[j].ToString()) + "\\ROWS.dtd" == CheckWrite[i])
                    {
                        FileInfo FI = new FileInfo(CheckWrite[i]);
                        FI.Delete();
                    }
                }
            }

            Close();
        }


        // <CloseAllMenu>
        // При клике по пункту меню Закрыть все
        // </CloseAllMenu>
        private void close_allToolStripMenuItem_Click(object sender, EventArgs e)
        {
            interfacePanel.Controls.Clear();
            hierarchyTreeView.Nodes.Clear();

            // <DeleteAllTemp> Удаление всех временных файлов </DeleteAllTemp>
            for (int j = 0; j <= openedFilesListBox.Items.Count-1; j++)
            {
                for (int i = 0; i <= lenghtWrite; i++)
                {
                    if (Path.GetDirectoryName(openedFilesListBox.Items[j].ToString()) + "\\ROWS.dtd" == CheckWrite[i])
                    {
                        FileInfo FI = new FileInfo(CheckWrite[i]);
                        FI.Delete();
                    }
                }
            }

            while (openedFilesListBox.Items.Count > 0)
            {
                openedFilesListBox.Items.RemoveAt(0);
            }

            close_allToolStripMenuItem.Enabled = false;
            closeToolStripMenuItem.Enabled = false;
            editToolStripMenuItem.Enabled = false;
            saveToolStripMenuItem.Enabled = false;
        }


        // <XmlFileMenu>
        // При клике по пункту меню Xml файл
        // </XmlFileMenu>
        private void xml_fileToolStripMenuItem_Click(object sender, EventArgs e)
        {
            EditXmlForm EXF = new EditXmlForm();
            EXF.Owner = this;
            EXF.ShowDialog();
        }


        // <InterfaceMenu>
        // При клике по пункту меню Интерфейс
        // </InterfaceMenu>
        private void interfaceToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (hierarchyTreeView.SelectedNode != null)
            {
                Parsing(filename, true, hierarchyTreeView.SelectedNode.Index);
                saveToolStripMenuItem.Enabled = true;
            }
            else
            {
                Parsing(filename, true, 0);
                saveToolStripMenuItem.Enabled = true;
            }
        }


        // <NewMenu>
        // При клике по пункту меню Новый
        // </NewMenu>
        private void newToolStripMenuItem_Click(object sender, EventArgs e)
        {
            NewXML NewXMLForm = new NewXML();
            // NewXMLForm.NewFileButton.PerformClick();
            if (NewXMLForm.CreateFile() == true)
                NewXMLForm.Show(this);
        }


        // <Styles>
        // При клике по пункту меню Стили оформления
        // </Styles>
        private void stylesToolStripMenuItem_Click(object sender, EventArgs e)
        {
            var style = new SelectStyleForm();
            style.Owner = this;
            try
            {
                style.ShowDialog();
            }
            catch
            {
                MessageBox.Show(Styleform.Error(), "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }


        // <SetupRights>
        // При клике по пункту меню Настройка прав
        // </SetupRights>
        public void SetupRights(object sender, EventArgs e)
        {
            RegistrationForm RegForm = new RegistrationForm();
            RegForm.Show(this);
        }


        // <SaveMenu>
        // При клике по пункту меню Сохранить
        // </SaveMenu>
        private void saveToolStripMenuItem_Click(object sender, EventArgs e)
        {
            if (hierarchyTreeView.SelectedNode != null)
                saveNode(filename, hierarchyTreeView.SelectedNode.Index);
            else
                saveNode(filename, 0);
        }


        // <ValidMenu>
        // При клике по пункту меню Валидация вкл.
        // </ValidMenu>
        private void Valid_Click(object sender, EventArgs e)
        {
            isValid = true;
            Valid.Enabled = false;
            notValid.Enabled = true;
        }


        // <notValidMenu>
        // При клике по пункту меню Валидация откл.
        // </notValidMenu>
        private void notValid_Click(object sender, EventArgs e)
        {
            isValid = true;
            Valid.Enabled = true;
            notValid.Enabled = false;
        }

        // <AboutMenu>
        // При клике по пункту меню О программе
        // </AboutMenu>
        private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
        {
            AboutForm AbF = new AboutForm();
            AbF.Owner = this;
            AbF.ShowDialog();
        }

    }
}